DAL Update methode
Home

DAL Update methode

DAL Update methode

We moeten de waarden van de klommen van één bepaalde rij in de tabel kunnen wijzigen.

Probleem

We hebben de id van de te wijzigen rij nodig om de te wijzigen rij in de tabel op te zoeken. De vullen de nieuwe waarden in in de eigenschappen van het Model. Als we de waarde niet willen wijzigen moeten we de oorspronkelijke waarde meegeven. De Update stored procedure verlangt immers alle waarden. De waarden die niet gewijzigd moeten worden en de te wijzigen waarden.

We willen feedback geven aan de gebruiker over de update. Er zijn drie toestanden die we in de gaten moeten houden:

  1. database foutmelding
  2. sql foutmelding
  3. update is gelukt

Design

We gebruiken een try catch om feedback te geven op systeemfouten en SQL server fouten. We interpreteren de retourwaarde van de ExecuteNonQuery methode. Als parameter geven we een BBL object mee. In ASP.NET MVC is dat vaak het model. Als de Id niet bestaat zal SQL een 0 waarde retourneren.

Oplossing

Voeg de Update methode aan de Dal klasse:

public int Update(Bll.EventCategory bll)
{
    MySqlConnection connection = new MySqlConnection(this.connectionString);
    // in de CommandText parameter geven we de naam van de stored procedure mee
    MySqlCommand command = new MySqlCommand("EventCategoryUpdate", connection);
    // zeg aan het command object dat het een stored procedure
    // zal krijgen en geen SQL Statement
    command.CommandType = CommandType.StoredProcedure;
    // voeg de parameters toe die aan de stored procedure doorgegeven moeten worden
    MySqlParameter pId = new MySqlParameter();
    pId.ParameterName = "pId";
    pId.DbType = DbType.Int32;
    // De Id van de rij die  moet worden geüpdated
    pId.Value = bll.Id;
    command.Parameters.Add(pId);
    MySqlParameter pName = new MySqlParameter();
    pName.ParameterName = "pName";
    pName.DbType = DbType.String;
    pName.Value = bll.Name;
    command.Parameters.Add(pName);

    Message = "Niets te melden";
    // we gaan ervan uit dat het mislukt
    int result = 0;
    using (connection)
    {
        try
        {
            connection.Open();
            //Verbinding geslaagd
            result = command.ExecuteNonQuery();
            // we moeten kijken naar de return van ExecuteNonQuery
            // retourneert het aantal rijen dat geüpdated is
            // is geüpdated als dat getal positief is
            if (result <= 0)
            {
                Message = $"De categorie met de naam {bll.Name} kon niet worden geüpdated!";
                }
            else
            {
                Message = $"De categorie met de naam {bll.Name} is geüpdated!";
            }
        }
        catch (MySqlException e)
        {
            this.message = e.Message;
        }
        RowCount = result;
    }
    // 0 of het aantal rijen dat geüpdated is
    return result;
}

Testen

  1. Voeg de ReadOne methode toe in IDal:
    using System.Collections.Generic;
    namespace FricFrac.Dal
    {
        interface IDal<T>
        {
            string Message { get; }
            int RowCount { get; }
            List<T> ReadAll();
            T ReadOne(int id);
            int Create(T bll);
            int Update(T bll);
        }
    }
    
  2. Vervolledig de methode FricFracDalTest in het bestand Learning.cs:
    public static void FricFracDalTest()
    {
        Console.WriteLine(" Fric-frac DAL test");
        FricFrac.Dal.EventCategory dal = new FricFrac.Dal.EventCategory();
        List<FricFrac.Bll.EventCategory> list = dal.ReadAll();
        Console.WriteLine($" {dal.RowCount} {dal.Message}");
        foreach (FricFrac.Bll.EventCategory item in list)
            Console.WriteLine(" {0} {1}", item.Id, item.Name);
        FricFrac.Bll.EventCategory bll = new FricFrac.Bll.EventCategory();
        bll = dal.ReadOne(4);
        Console.WriteLine($" {dal.RowCount} {dal.Message}");
        bll = dal.ReadOne(200);
        // we lezen een bestaande categorie in
        bll = dal.ReadOne(6);
        Console.WriteLine($" {dal.RowCount} {dal.Message}");
        // we proberen deze gevonden categorie weer toe te voegen
        dal.Create(bll);
        Console.WriteLine($" {dal.RowCount} {dal.Message}");
        // we wijzigen de naam van de categorie
        bll.Name = "Hackathon Programmeren";
        // En proberen die toe te voegen
        dal.Create(bll);
        Console.WriteLine($" {dal.RowCount} {dal.Message}");
        // we zoeken de naam van de categorie
        bll.Name = "Hackathon Programmeren";
        dal.ReadOne(bll.Id);
        // we wijzigen de naam van de categorie met Id = 6
        bll.Name = "Hackathon Programmeren Deel 2";
        // En proberen die te updaten
        dal.Update(bll);
        Console.WriteLine($" {dal.RowCount} rij(en) gewijzigd, {dal.Message}");
    }
  3. Roep de methode op in Program.cs:
    using System;
    
    namespace AdoDotNet
    {
        class Program
        {
            public static void Main(string[] args)
            {
                Console.WriteLine("Leren werken met ADO.NET in .NET Core!");
                // Learning.TestMySqlConnector();
                // Learning.ReflectPropertiesTryOut();
                // Learning.LearnDotNetCoreConfigurationApi();
                Learning.FricFracDalTest();
                Console.ReadKey();
            }
        }
    }
  4. En dat is het resultaat:
    Visual Studio Result Test ADO.NET DAL Update
    Visual Studio Result Test ADO.NET DAL Update

JI
2017-09-15 18:17:40